/**
 * 自动更新功能测试脚本
 * 测试自动Git更新功能是否正常工作
 */

const path = require('path');
const fs = require('fs');

// 设置工作目录到项目根目录
const projectRoot = path.join(__dirname, '..');
process.chdir(projectRoot);

const logger = require(path.join(projectRoot, 'src/utils/logger'));
const AutoUpdater = require(path.join(projectRoot, 'scripts/auto-update'));

async function testAutoUpdate() {
  console.log('🧪 开始测试自动更新功能...\n');

  try {
    // 测试1: 检查AutoUpdater类是否正常加载
    console.log('📋 测试1: 检查AutoUpdater类加载...');
    const updater = new AutoUpdater();
    console.log('✅ AutoUpdater类加载成功');

    // 测试2: 检查Git状态
    console.log('\n📋 测试2: 检查Git仓库状态...');
    try {
      const hasUpdates = await updater.checkGitStatus();
      console.log(`✅ Git状态检查成功, 有更新: ${hasUpdates}`);
    } catch (error) {
      console.log(`⚠️  Git状态检查失败: ${error.message}`);
      console.log('💡 这可能是因为：');
      console.log('   - 项目不是Git仓库');
      console.log('   - 没有配置远程仓库');
      console.log('   - 网络连接问题');
    }

    // 测试3: 检查日志目录和文件权限
    console.log('\n📋 测试3: 检查日志系统...');
    const logDir = path.join(projectRoot, 'logs');
    const logFile = path.join(logDir, 'auto-update.log');
    
    // 确保日志目录存在
    if (!fs.existsSync(logDir)) {
      fs.mkdirSync(logDir, { recursive: true });
      console.log('✅ 创建日志目录成功');
    } else {
      console.log('✅ 日志目录已存在');
    }

    // 测试写入日志
    updater.log('测试日志写入功能');
    if (fs.existsSync(logFile)) {
      console.log('✅ 日志写入功能正常');
    } else {
      console.log('❌ 日志写入失败');
    }

    // 测试4: 检查锁文件机制
    console.log('\n📋 测试4: 检查锁文件机制...');
    const lockFile = path.join(logDir, 'update.lock');
    
    // 测试锁文件创建
    updater.createLock();
    if (fs.existsSync(lockFile)) {
      console.log('✅ 锁文件创建成功');
    } else {
      console.log('❌ 锁文件创建失败');
    }
    
    // 测试锁文件检查
    const isLocked = updater.checkLock();
    console.log(`✅ 锁文件检查功能正常, 当前锁定状态: ${isLocked}`);
    
    // 清理锁文件
    updater.removeLock();
    if (!fs.existsSync(lockFile)) {
      console.log('✅ 锁文件清理成功');
    } else {
      console.log('❌ 锁文件清理失败');
    }

    // 测试5: 检查环境变量配置
    console.log('\n📋 测试5: 检查环境变量配置...');
    const autoUpdateEnabled = process.env.ENABLE_AUTO_UPDATE !== 'false';
    console.log(`✅ 自动更新环境变量: ENABLE_AUTO_UPDATE=${process.env.ENABLE_AUTO_UPDATE || 'undefined'} (解析为: ${autoUpdateEnabled})`);

    // 测试6: 模拟完整更新流程（仅检查，不实际执行）
    console.log('\n📋 测试6: 模拟更新检查流程...');
    console.log('🔍 正在执行完整的更新检查...');
    
    const result = await updater.run();
    
    console.log('\n📊 更新检查结果:');
    console.log(`   更新状态: ${result.updated ? '✅ 有更新' : '📄 无更新'}`);
    console.log(`   耗时: ${result.duration || 'N/A'}秒`);
    console.log(`   消息: ${result.message || 'N/A'}`);
    
    if (result.error) {
      console.log(`   错误: ${result.error}`);
    }
    
    if (result.packageChanged !== undefined) {
      console.log(`   依赖更新: ${result.packageChanged ? '是' : '否'}`);
    }

    console.log('\n🎉 自动更新功能测试完成!');
    
    // 显示使用建议
    console.log('\n💡 使用建议：');
    console.log('   - 在生产环境启用: ENABLE_AUTO_UPDATE=true');
    console.log('   - 手动检查更新: npm run update:check');
    console.log('   - 强制更新检查: npm run update:force');
    console.log('   - 查看更新日志: cat logs/auto-update.log');
    console.log('   - 系统会每2小时自动检查一次更新');

  } catch (error) {
    console.log(`\n❌ 测试过程中发生错误: ${error.message}`);
    console.log('\n🔧 故障排除建议：');
    console.log('   1. 检查项目是否是Git仓库');
    console.log('   2. 确保配置了远程Git仓库');
    console.log('   3. 检查网络连接');
    console.log('   4. 确保有足够的文件写入权限');
    console.log('   5. 查看详细错误日志');
    
    process.exit(1);
  }
}

// 运行测试
testAutoUpdate().then(() => {
  console.log('\n👋 测试脚本执行完成');
}).catch(error => {
  console.log(`\n❌ 测试脚本执行失败: ${error.message}`);
  process.exit(1);
});
